/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package OpenCodes.Servicios.Persona;

/**
 *
 * @author Administrador
 */
import OpenCodes.Servicios.*;
import OpenCodes.Dominio.Persona;
import OpenCodes.Dominio.Direccion;
import OpenCodes.UI.IUsuarioInterfazPersona;
import OpenCodes.Persistencia.AbstractDB;
import OpenCodes.Persistencia.MySQL.Jugador.IJugadorRepositorio;
import OpenCodes.Persistencia.RepositorioException;
import OpenCodes.Persistencia.MySQL.Persona.IPersonaRepositorio;
import java.util.List;

/*
 Todavia no se implementa la interfaz IBajaPersonaServicio, IModificarPersonaServicio
-------------!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 CUANDO SE INSTANCIA LA CLASE PERSONA SERVICE, SE DEBE IMPLEMENTAR TODOS LOS METODOS DE LAS INTERFACES
 AUNQUE SOLO SE UTILIZE UNA ACCION PROPIA DE LA CLASE.
 */

public class PersonaServicio implements IAltaPersonaServicio, IListadoPersonaServicio, IModificarPersonaServicio, IBajaPersonaServicio {
    private AbstractDB fabricaDb;
    @Override
    public void init(IUsuarioInterfazPersona UI)  {
       
       fabricaDb = AbstractDB.getInstance();
        

    }
   
    @Override
       public void agregar(IUsuarioInterfazPersona ui) throws ServicioException {
       
        int Id = 0; // id=0 porque el Id lo carga la base de datos con un valor autonumerico

        String nombre=ui.getNombre();
        String apellido=ui.getApellido();
        String telefono = ui.getTelefono();
        String calle = ui.getCalle();
        int numero = ui.getNumero();
        String piso = ui.getPiso();
        String departamento = ui.getDepartamento();

        Direccion direccion = null;
           
      
			//if (!calle.equals("")|| numero > 0 || !piso.equals("")  || !departamento.equals("") ){
		/**
         * ERROR!! vERIFICAR CONSTRUCTOR
         *   direccion = new Direccion(calle, numero, piso, departamento);
         */
        
      
            //}

        Persona persona = new Persona(Id, nombre, apellido, telefono, direccion);

			IPersonaRepositorio repo;
            /* NO EXISTE REPO PERSONA
			try {
				repo = fabricaDb.getPersonaRepositorio();
				repo.agregar(persona);

			} catch (RepositorioException e) {
				throw new ServicioException("Fallo la incorporacion de la persona", e);
			}
             * */
		} 
    

    @Override
    public void listar(IUsuarioInterfazPersona ui) throws ServicioException {
		//IPersonaRepositorio repo;
        IJugadorRepositorio repo;
        /**
             * ERROR!! NO EXISTE NINGUN REPOSITORIO DE PERSONAS
		try {
            
             
			//repo = fabricaDb.getPersonaRepositorio();
            repo=fabricaDb.getJugadorRepositorio();

            
            List<Persona> lista = repo.listarPersonas();
			ui.setListaPersonas(lista);
             
		} catch (RepositorioException e) {
			throw new ServicioException("Falló el listado", e) ;
             
		}
        */
	}
    /*
        *
        * Este es el metodo buscar con parametros!!
        * 
    @Override
    public void buscar(IUsuarioInterfazPersona ui) throws ServicioException {
        IPersonaRepositorio repo;
		try {
			repo = fabricaDb.getPersonaRepositorio();
            List<Persona> lista = repo.buscarPersonas(ui.getNombre(),ui.getApellido());
			ui.setListaPersonasBusqueda(lista);
		} catch (RepositorioException e) {
			throw new ServicioException("Falló el listado", e) ;
		}
    }
    */
   
    @Override
    public void modificar(IUsuarioInterfazPersona ui) throws ServicioException
    {
        int id=ui.getId();

        String nombre=ui.getNombre();
        String apellido=ui.getApellido();
        String telefono = ui.getTelefono();
        String calle = ui.getCalle();
        int numero = ui.getNumero();
        String piso = ui.getPiso();
        String departamento = ui.getDepartamento();

        Direccion direccion = null;
			//if (!calle.equals("")|| numero > 0 || !piso.equals("")  || !departamento.equals("") ) {
        
        /**
         * ERROR!!!
         * CHECKEAR CONSTRUCTO DE DIRECCION
         * direccion = new Direccion(calle, numero, piso, departamento);
         */
		

        Persona persona = new Persona(id, nombre, apellido, telefono, direccion);

			IPersonaRepositorio repo;
            /* NO EXISTE REPO PERSONA
			try {

				repo = fabricaDb.getPersonaRepositorio();
                repo.actualizar(persona);

				//repo.agregar(persona);
			} catch (RepositorioException e) {
				throw new ServicioException("Fallo la modificacion de la persona", e);
			}
             * */
		}


    
    @Override
    public void eliminar(IUsuarioInterfazPersona ui)throws ServicioException
    {
        int id=ui.getId();

        String nombre=ui.getNombre();
        String apellido=ui.getApellido();
        String telefono = ui.getTelefono();
        String calle = ui.getCalle();
        int numero = ui.getNumero();
        String piso = ui.getPiso();
        String departamento = ui.getDepartamento();

        Direccion direccion = null;
			if (!calle.equals("")|| numero > 0 || !piso.equals("")  || !departamento.equals("") ) {
                /**
                 * * ERROR!!! CHECKER CONSTRUCTOR DE DIRECCION
                 * direccion = new Direccion(calle, numero, piso, departamento);
                 */
         
				


        Persona persona = new Persona(id, nombre, apellido, telefono, direccion);

			IPersonaRepositorio repo;
            /* NO EXISTE REPO PERSONA
			try {
				repo = fabricaDb.getPersonaRepositorio();
                repo.eliminar(persona);

				//repo.agregar(persona);
			} catch (RepositorioException e) {
				throw new ServicioException("Fallo la eliminacion de la persona", e);
			}
             * */
		}
    }

            
    
}
